import 'package:flutter/material.dart';

///
/// des:
///
class AnimationDemo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _AnimationDemo();
}

class _AnimationDemo extends State<AnimationDemo>
    with SingleTickerProviderStateMixin {
  AnimationController animationController;
  var animation;

  /// 初始化状态
  @override
  void initState() {
    super.initState();
    animationController = AnimationController(
      duration: Duration(seconds: 1),
      // vsync: this // vsync: this, // del by wcx TODO
    )
      ..addListener(() {
        // 添加监听
        setState(() {});
      })
      ..addStatusListener((status) {
        // 添加动画状态监听
        if (status == AnimationStatus.completed) {
          // 动画执行结束
          //执行结束反向执行
          animationController.reverse(); // 反向执行
        } else if (status == AnimationStatus.dismissed) {
          // 动画取消
          //反向执行结束正向执行
          animationController.forward(); // 正向执行
        }
      });

    bool isVersion1 = false;
    if (isVersion1) {
      // 版本1.0
      animation = Tween(begin: 80.0, end: 100.0).animate(animationController);
    } else {
      // 版本2.0
      // 创建一个插值器(控制动画的执行速度)
      animation =
          CurvedAnimation(parent: animationController, curve: Curves.easeIn); // 对动画进行一个曲线的处理
      // 创建一个Tween 动画，设置开始值和结束值
      animation = Tween(begin: 80.0, end: 100.0).animate(animation);
    }
    animationController.forward();
  }

  /// 构建UI
  @override
  Widget build(BuildContext context) {
    return Center(
      // 居中
      child: Container(
        // 容器组件
        height: animation.value, // 高度 从80到100
        width: animation.value,
        color: Colors.red,
      ),
    );
  }

  /// 释放资源
  @override
  void dispose() {
    super.dispose(); // 调用父类的dispose方法
    animationController.dispose(); // 调用动画控制器的dispose方法
  }
}
